diff --git a/system/core/Input.php b/system/core/Input.php
index f181c27..97884d3 100644
--- a/system/core/Input.php
+++ b/system/core/Input.php
@@ -103,22 +103,16 @@
 	 */
 	protected $headers = array();
 
-	/**
-	 * Raw input stream data as received from php://input
-	 *
-	 * @see	CI_Input::raw_input_stream()
-	 * @var	array
-	 */
 	protected $_raw_input_stream = NULL;
 
 	/**
-	 * Input stream data
-	 *
-	 * Parsed from raw_input_stream at runtime
-	 *
-	 * @see	CI_Input::input_stream()
-	 * @var	array
-	 */
+	* Input stream data
+	*
+	* Parsed from php://input at runtime
+	*
+	* @see	CI_Input::input_stream()
+	* @var	array
+	*/
 	protected $_input_stream = NULL;
 
 	/**
@@ -307,54 +301,35 @@
 	// ------------------------------------------------------------------------
 
 	/**
-	 * Fetch raw data from php://input stream
-	 *
-	 * Useful when data is not an array.
-	 */
-	public function raw_input_stream()
-	{
-		// Prior to PHP 5.6, the input stream can only be read once,
-		// so we'll need to check if we have already done that first.
-		if (is_null($this->_raw_input_stream))
-		{
-			$this->_raw_input_stream = file_get_contents('php://input');
-		}
-
-		return $this->_raw_input_stream;
-	}
-	
-	// ------------------------------------------------------------------------
-
-	/**
-	 * Fetch an item from the input stream
-	 *
-	 * Useful when you need to access PUT, DELETE or PATCH request data.
-	 *
-	 * @param	string	$index		Index for item to be fetched
-	 * @param	bool	$xss_clean	Whether to apply XSS filtering
-	 * @return	mixed
-	 */
+	* Fetch an item from the php://input stream
+	*
+	* Useful when you need to access PUT, DELETE or PATCH request data.
+	*
+	* @param	string $index Index for item to be fetched
+	* @param	bool $xss_clean Whether to apply XSS filtering
+	* @return	mixed
+	*/
 	public function input_stream($index = NULL, $xss_clean = NULL)
 	{
-		parse_str($this->raw_input_stream(), $this->_input_stream);
+	// Prior to PHP 5.6, the input stream can only be read once,
+	// so we'll need to check if we have already done that first.
+		if ( ! is_array($this->_input_stream))
+		{
+			parse_str($this->raw_input_stream, $this->_input_stream);
+			is_array($this->_input_stream) OR $this->_input_stream = array();
+		}
 		return $this->_fetch_from_array($this->_input_stream, $index, $xss_clean);
 	}
-	
+
 	// ------------------------------------------------------------------------
 
-	/**
-	 * Fetch an item from the input stream
-	 *
-	 * Useful when you need to access input that's been send as json'
-	 *
-	 * @param	string	$index		Index for item to be fetched
-	 * @param	bool	$xss_clean	Whether to apply XSS filtering
-	 * @return	mixed
-	 */
-	public function json_input_stream($index = NULL, $xss_clean = NULL)
+	public function __get($name)
 	{
-		$json_input_stream = json_decode($this->raw_input_stream(), true);
-		return $this->_fetch_from_array($json_input_stream, $index, $xss_clean);
+		if ($name === 'raw_input_stream')
+		{
+			isset($this->_raw_input_stream) OR $this->_raw_input_stream = file_get_contents('php://input');
+			return $this->_raw_input_stream;
+		}
 	}
 
 	// ------------------------------------------------------------------------
diff --git a/user_guide_src/source/changelog.rst b/user_guide_src/source/changelog.rst
index 5c5cd5e..311aec2 100644
--- a/user_guide_src/source/changelog.rst
+++ b/user_guide_src/source/changelog.rst
@@ -492,6 +492,8 @@
       -  Added an option for ``_clean_input_keys()`` to return FALSE instead of terminating the whole script.
       -  Deprecated the ``is_cli_request()`` method, it is now an alias for the new :php:func:`is_cli()` common function.
       -  Added an ``$xss_clean`` parameter to method ``user_agent()`` and removed the ``$user_agent`` property.
+      -  Added gettable property ``raw_input_stream`` to access the **php://input** data.
+      -  Changed method ``input_stream()`` to obtain the data from ``raw_input_stream`` property.
 
    -  :doc:`Common functions <general/common_functions>` changes include:
 
diff --git a/user_guide_src/source/libraries/input.rst b/user_guide_src/source/libraries/input.rst
index 967f69d..2b71b34 100644
--- a/user_guide_src/source/libraries/input.rst
+++ b/user_guide_src/source/libraries/input.rst
@@ -91,8 +91,14 @@
 and access multiple variables without caring that you might only have
 one shot at all of the POST data.
 
-CodeIgniter will take care of that for you, and you can access data
-from the **php://input** stream at any time, just by calling the
+CodeIgniter will take care of that for you, and you can read the data
+from the **php://input** stream at any time, just by using the
+``raw_input_stream`` property::
+
+	$this->input->raw_input_stream;
+
+Additionally if the input stream is formated in a query string fashion
+you can access it's values, just by calling the
 ``input_stream()`` method::
 
 	$this->input->input_stream('key');
